#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
using namespace std;
#include "SConfig.h"

//去掉字符串前后空字符
void trim_string(char *str)  
{  
	char *start, *end;  
	int len = strlen(str);  

	//去掉最后的换行符  
	if(str[len-1] == '\n')  
	{  
		len--;      //字符串长度减一  
		str[len] = 0;   //给字符串最后一个字符赋0，即结束符  
	}  

	//去掉两端的空格  
	start = str;        //指向首字符  
	end = str + len -1; //指向最后一个字符  
	while(*start && isspace(*start))  
	  start++;    //如果是空格，首地址往前移一位，如果不是，则跳过该循环  
	while(*end && isspace(*end))  
	  *end-- = 0; //如果是空格，末地址往前移一位，并赋结束符  
	strcpy(str, start); //把首地址还给str  
}  

bool SConfig::GetConfigInt(const char *key, int &val)
{
    int i;
    for(i = 0; i < num; i ++)
    {
        if(strcmp(conf[i].key,key) == 0)
        {
		//	printf("key:%s\n", conf[i].key);
            val = atoi(conf[i].value);
		//	printf("value:%s, val:%d\n",conf[i].value, val);
        }
    }
	return true;
}

bool SConfig::GetConfigFloat(const char *key, float &val)
{
    int i;
    for(i = 0; i < num; i ++)
    {
        if(strcmp(conf[i].key,key) == 0)
        {
            val = atof(conf[i].value);
        }
    }
    return true;
}

bool SConfig::GetConfigString(const char *key, char **str)
{
    int i;
    for(i = 0; i < num; i ++)
    {
        if(strcmp(conf[i].key,key) == 0)
        {
            *str = conf[i].value;
        }
    }
    return true;
}

void SConfig::print_conf()
{
    int i;
    for(i = 0; i < num; i++)
    {
        printf("key:%s, val:%s", this->conf[i].key, this->conf[i].value);
    }
}

SConfig::SConfig()
{
    num = 0;
}
bool SConfig::ParseFile(const char *file)
{
    FILE *fd = fopen(file, "r");
    if(fd < 0)
    {
        printf("open failed!\n");
        return false;
    }
    char buf[1024];
    char *str;
    while(fgets(buf, sizeof(buf),fd) )
    {
		trim_string(buf);
        str = strchr(buf,'=');
        if(!str)
        {
            continue;
        }
      
        strcpy(conf[num].value,str+1);
		trim_string(conf[num].value);
		int n =  strlen(buf) - strlen(str);
        strncpy(conf[num].key, buf, n);
		conf[num].key[n] = '\0';
		trim_string(conf[num].key);
		//printf("key:%s val:%s", conf[num].key, conf[num].value);
        num++;
		
    }
    fclose(fd);
    return true;
}
